package educar.controllers;

import educar.gui.AdminView;
import educar.gui.IView;
import educar.models.Materia;
import educar.models.materiaNotFound;

public class AdminMateriaController implements IController
{
    AdminView view;

    public void setView(IView view)
    {
        this.view = (AdminView)view;
        actualizarMaterias();
    }

    public void processItemList(String name, String item)
    {
        Materia materia = null;
        try
        {
            materia = Materia.getMateriabyCodigo(name);
        }
        catch (materiaNotFound e)
        {
            e.printStackTrace();
        }

        view.setMateriaCodigo(materia.getCodigo());
        view.setMateriaNombre(materia.getNombre());
    }

    public void process(String model)
    {
        if (model.compareTo(AdminView.RESET) == 0)
            reset();
        else if (model.compareTo(AdminView.ACTUALIZAR) == 0)
            update();
        else if (model.compareTo(AdminView.GUARDARNUEVO) == 0)
            guardar();
        else if (model.compareTo(AdminView.BORRAR) == 0)
            borrar();
    }

    private void reset()
    {
        view.setMateriaCodigo("");
        view.setMateriaNombre("");
    }

    private void update()
    {
        if (view.getMateriaNombre().trim().isEmpty())
        {
            view.present("Ingrese un nombre");
            return;
        }
        try
        {
            Materia c = Materia.getMateriabyCodigo(view.getMateriaCodigo());
            c.setNombre(view.getMateriaNombre());
            c.update();
        }
        catch (materiaNotFound e)
        {
            view.present("Actualizacion no valida");
        }
    }

    private void guardar()
    {
        if (view.getMateriaNombre().trim().isEmpty())
        {
            view.present("Ingrese un nombre");
            return;
        }

        Materia c = new Materia(view.getMateriaNombre());
        if (!c.save())
            view.present("Error al guardar");
        else
        {
            view.setMateriaCodigo(c.getCodigo());
            actualizarMaterias();
        }
    }

    private void actualizarMaterias()
    {
        String[] c = Materia.getAllMateriasArray();
        ((AdminView)view).setMaterias(c);
    }

    private void borrar()
    {
        try
        {
            Materia materia = Materia.getMateriabyCodigo(view.getMateriaCodigo());
            materia.destroy();
            reset();
            actualizarMaterias();
        }
        catch (materiaNotFound e)
        {
            view.present("Materia inexistente");
        }
    }
}
